/*
 * OrdenProcesoDAO.java
 *
 * Created on 12 de diciembre de 2006, 05:48 PM
 *
 * To change this template, choose Tools | Options and locate the template under
 * the Source Creation and Management node. Right-click the template and choose
 * Open. You can then make changes to the template in the Source Editor.
 */

package com.src.computec.radar.consultas.ordenproceso.dao;

import com.src.computec.radar.base.dao.GenericDAO;
import com.src.computec.radar.base.dao.exception.DAOException;
import com.src.computec.radar.consultas.base.constantes.ConstantesGenerales;
import com.src.computec.radar.consultas.ordenproceso.dto.BaseClienteDto;
import com.src.computec.radar.consultas.ordenproceso.dto.EmpresaMensajeriaNodoDto;
import com.src.computec.radar.consultas.source.ConsultasSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import static com.src.computec.radar.consultas.base.constantes.ConstantesGenerales.SCHEMA;
import static com.src.computec.radar.consultas.base.constantes.ConstantesGenerales.DECIMAL_FORMAT;
import com.src.computec.radar.consultas.ordenproceso.dto.BusquedaDto;
import com.src.computec.radar.consultas.ordenproceso.dto.GestionDto;
import com.src.computec.radar.consultas.ordenproceso.dto.GestionImagenDto;
import com.src.computec.radar.consultas.ordenproceso.dto.OrdenProcesoDto;
import com.src.computec.radar.consultas.ordenproceso.dto.TipoGestionDto;
import com.src.computec.radar.consultas.ordenproceso.factory.QueryFactory;
import com.src.computec.radar.consultas.ordenproceso.factory.exception.QueryFactoryException;
import com.src.log4j.logger.custom.XLogger;
import java.sql.Timestamp;
import java.util.Date;
import java.util.Iterator;

/**
 *
 * @author aocampo
 */
public class OrdenProcesoDAO extends GenericDAO implements BaseOrdenProcesoDAO {
    
    private static XLogger xLogger;
    HashMap conMap = new HashMap();
    
    /** Creates a new instance of OrdenProcesoDAO */
    public OrdenProcesoDAO() {
        this.xLogger = (XLogger) XLogger.getLogger(this.getClass().getName());
    }
    
    public List getDetallesOrdenProcesoByBusqueda(BusquedaDto dto) throws DAOException {
        List listDetallesOrdenProceso = new ArrayList();
        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        try {
            con = getConnectionDB2();
            con.setReadOnly(true);
            con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
            statement = QueryFactory.getInstance().getQuery(QueryFactory.DETALLES_ORDEN_PROCESO_BY_BUSQUEDA, con, dto);
            rs = statement.executeQuery();
            while (rs.next()) {
                int indice = 0;
                OrdenProcesoDto ordenProcesoDto = new OrdenProcesoDto();
                ordenProcesoDto.setNumeroOrden(rs.getString(++indice));
                ordenProcesoDto.setRazonSocial(rs.getString(++indice));
                ordenProcesoDto.setDescripcionProducto(rs.getString(++indice));
                ordenProcesoDto.setFechaProceso(rs.getDate(++indice));
                listDetallesOrdenProceso.add(ordenProcesoDto);
            }
        }
        catch (QueryFactoryException e) {
            throw new DAOException("OrdenProcesoDAO:getDetallesOrdenProcesoByBusqueda:" + e.toString(), e);
        }
        catch (SQLException e) {
            throw new DAOException("OrdenProcesoDAO:getDetallesOrdenProcesoByBusqueda:" + e.toString(), e);
        }
        finally {	    
            closeConnection(con, statement, rs);
        }
        return listDetallesOrdenProceso;
    }
    
    protected List getTiposGestion() throws DAOException {
        List listTiposGestion = new ArrayList();
        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        try {
            con = getConnectionDB2();
            con.setReadOnly(true);
            con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
            statement = con.prepareStatement("SELECT CODIGO_TIPO_GESTION, NOMBRE_TIPO_GESTION " +
                                             "FROM " + SCHEMA + ".TIPO_GESTION_ENVIO");
            rs = statement.executeQuery();
            while (rs.next()) {
                int indice = 0;
                TipoGestionDto tipoGestionDto = new TipoGestionDto();
                tipoGestionDto.setCodigoTipoGestion(rs.getString(++indice));
                tipoGestionDto.setNombreTipoGestion(rs.getString(++indice));
                listTiposGestion.add(tipoGestionDto);
            }
        } 
        catch (SQLException e) {
            throw new DAOException("OrdenProcesoDAO:getTiposGestion:" + e.toString(), e);
        }
        finally {
            closeConnection(con, statement, rs);
        }
        return listTiposGestion;
    }
    
    protected List getGestionesByTipoGestion(TipoGestionDto dto) throws DAOException {
        List listGestiones = new ArrayList();
        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        int indice = 0;
        try {
            con = getConnectionDB2();
            con.setReadOnly(true);
            con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
            if (!dto.getCodigoTipoGestion().equals("-1")) {
                statement = con.prepareStatement("SELECT CODIGO_GESTION, NOMBRE_GESTION " +
                                                 "FROM " + SCHEMA + ".GESTION_ENVIO " +
                                                 "WHERE CODIGO_TIPO_GESTION = ?");
                statement.setObject(++indice, dto.getCodigoTipoGestion());
                rs = statement.executeQuery();
            }
            else {
                statement = con.prepareStatement("SELECT CODIGO_GESTION, NOMBRE_GESTION " +
                                                 "FROM " + SCHEMA + ".GESTION_ENVIO");
                rs = statement.executeQuery();
            }
            while (rs.next()) {
                indice = 0;
                GestionDto gestionDto = new GestionDto();
                gestionDto.setCodigoGestion(rs.getString(++indice));
                gestionDto.setNombreGestion(rs.getString(++indice));
                listGestiones.add(gestionDto);
            }
        } 
        catch (SQLException e) {
            throw new DAOException("OrdenProcesoDAO:getGestionesByTipoGestion:" + e.toString(), e);
        }
        finally {
            closeConnection(con, statement, rs);
        }
        return listGestiones;
    }
    
    protected List calcularPorcentajesByTiposGestion(List listTiposGestion, Integer numeroTotalEnvios) throws DAOException {
        List listTiposGestionComplete = new ArrayList();
        Double porcentajeTotal = new Double(0);
        Iterator iterator = listTiposGestion.iterator();
        while (iterator.hasNext()) {
            TipoGestionDto tipoGestionDto = (TipoGestionDto) iterator.next();
            Double porcentaje;
            if (numeroTotalEnvios != 0) {
                porcentaje = (tipoGestionDto.getNumeroEnvios().doubleValue() * 100) / numeroTotalEnvios.doubleValue();
            }
            else {
                porcentaje = new Double(0);
            }
            tipoGestionDto.setPorcentaje(porcentaje);
            tipoGestionDto.setPorcentajeFormat(DECIMAL_FORMAT.format(porcentaje.doubleValue()));
            porcentajeTotal +=  porcentaje;
            listTiposGestionComplete.add(tipoGestionDto);
        }
        TipoGestionDto tipoGestionTotalDto = new TipoGestionDto();
        tipoGestionTotalDto.setCodigoTipoGestion("-1");
        tipoGestionTotalDto.setNombreTipoGestion("TOTAL");
        tipoGestionTotalDto.setNumeroEnvios(numeroTotalEnvios);
        tipoGestionTotalDto.setNumeroEnviosFormat(DECIMAL_FORMAT.format(numeroTotalEnvios));
        if (tipoGestionTotalDto.getNumeroEnvios() > 0) {
            tipoGestionTotalDto.setGreaterThanZero(true);
        }
        else {
            tipoGestionTotalDto.setGreaterThanZero(false);
        }
        tipoGestionTotalDto.setPorcentaje(porcentajeTotal);
        tipoGestionTotalDto.setPorcentajeFormat(DECIMAL_FORMAT.format(porcentajeTotal));
        listTiposGestionComplete.add(tipoGestionTotalDto);
        return listTiposGestionComplete;
    }
    
    public List getTiposGestionByBusqueda(BusquedaDto dto) throws DAOException {
        List listTiposGestion = new ArrayList();
        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        try {
            Integer numeroTotalEnvios = 0;
            con = getConnectionDB2();
            con.setReadOnly(true);
            con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
            statement = QueryFactory.getInstance().getQuery(QueryFactory.NUMERO_ENVIOS_BY_TIPO_GESTION_AND_BUSQUEDA, con, dto);
                int indice = 0;
                rs = statement.executeQuery();
                while (rs.next()) {
                    indice = 0;
                    TipoGestionDto tipoGestionDto = new TipoGestionDto();
                    tipoGestionDto.setCodigoTipoGestion(rs.getString(++indice));
                    tipoGestionDto.setNombreTipoGestion(rs.getString(++indice));
                    tipoGestionDto.setNumeroEnvios(rs.getInt(++indice));
                    tipoGestionDto.setNumeroEnviosFormat(DECIMAL_FORMAT.format(tipoGestionDto.getNumeroEnvios()));
                    if (tipoGestionDto.getNumeroEnvios() > 0) {
                        tipoGestionDto.setGreaterThanZero(true);
                    }
                    else {
                        tipoGestionDto.setGreaterThanZero(false);
                    }
                    numeroTotalEnvios += tipoGestionDto.getNumeroEnvios();
                    listTiposGestion.add(tipoGestionDto);
                }
                listTiposGestion = this.calcularPorcentajesByTiposGestion(listTiposGestion, numeroTotalEnvios);
        }
        catch (QueryFactoryException e) {
            throw new DAOException("OrdenProcesoDAO:getTiposGestionByBusqueda:" + e.toString(), e);
        }
        catch (SQLException e) {
            throw new DAOException("OrdenProcesoDAO:getTiposGestionByBusqueda:" + e.toString(), e);
        }
        finally {
            closeConnection(con, statement, rs);
        }
        return listTiposGestion;
    }
    
    protected List calcularPorcentajesByGestion(List listGestiones, Integer numeroTotalEnvios) throws DAOException {
        List listGestionesComplete = new ArrayList();
        Double porcentajeTotal = new Double(0);
        Iterator iterator = listGestiones.iterator();
        while (iterator.hasNext()) {
            GestionDto gestionDto = (GestionDto) iterator.next();
            Double porcentaje;
            if (numeroTotalEnvios != 0) {
                porcentaje = (gestionDto.getNumeroEnvios().doubleValue() * 100) / numeroTotalEnvios.doubleValue();
            }
            else {
                porcentaje = new Double(0);
            }
            gestionDto.setPorcentaje(porcentaje);
            gestionDto.setPorcentajeFormat(DECIMAL_FORMAT.format(porcentaje.doubleValue()));
            porcentajeTotal +=  porcentaje;
            listGestionesComplete.add(gestionDto);
        }
        GestionDto gestionTotalDto = new GestionDto();
        gestionTotalDto.setCodigoGestion("-1");
        gestionTotalDto.setNombreGestion("TOTAL");
        gestionTotalDto.setNumeroEnvios(numeroTotalEnvios);
        gestionTotalDto.setNumeroEnviosFormat(DECIMAL_FORMAT.format(numeroTotalEnvios));
        if (gestionTotalDto.getNumeroEnvios() > 0) {
            gestionTotalDto.setGreaterThanZero(true);
        }
        else {
            gestionTotalDto.setGreaterThanZero(false);
        }
        gestionTotalDto.setPorcentaje(porcentajeTotal);
        gestionTotalDto.setPorcentajeFormat(DECIMAL_FORMAT.format(porcentajeTotal));
        listGestionesComplete.add(gestionTotalDto);
        return listGestionesComplete;
    }
    
    public List getGestionesByBusqueda(BusquedaDto dto) throws DAOException {
        List listGestiones = new ArrayList();
        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        try {
            Integer numeroTotalEnvios = 0;
            con = getConnectionDB2();
            con.setReadOnly(true);
            con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
            statement = QueryFactory.getInstance().getQuery(QueryFactory.NUMERO_ENVIOS_BY_GESTION_AND_BUSQUEDA, con, dto);
            int indice = 0;
            rs = statement.executeQuery();
            while (rs.next()) {
                indice = 0;
                GestionDto gestionDto = new GestionDto();
                gestionDto.setCodigoGestion(rs.getString(++indice));
                gestionDto.setNombreGestion(rs.getString(++indice));
                gestionDto.setNumeroEnvios(rs.getInt(++indice));
                gestionDto.setNumeroEnviosFormat(DECIMAL_FORMAT.format(gestionDto.getNumeroEnvios()));
                if (gestionDto.getNumeroEnvios() > 0) {
                    gestionDto.setGreaterThanZero(true);
                }
                else {
                    gestionDto.setGreaterThanZero(false);
                }
                numeroTotalEnvios += gestionDto.getNumeroEnvios();
                listGestiones.add(gestionDto);
            }
            listGestiones = this.calcularPorcentajesByGestion(listGestiones, numeroTotalEnvios);
        }
        catch (QueryFactoryException e) {
            throw new DAOException("OrdenProcesoDAO:getGestionesByBusqueda:" + e.toString(), e);
        }
        catch (SQLException e) {
            throw new DAOException("OrdenProcesoDAO:getGestionesByBusqueda:" + e.toString(), e);
        }
        finally {
            closeConnection(con, statement, rs);
        }
        return listGestiones;
    }
        
    protected List calcularPorcentajesByGestionImagenes(List listGestionImagenes, Integer numeroTotalImagenes) throws DAOException {
        List listGestionImagenesComplete = new ArrayList(); 
        Double porcentajeTotal = new Double(0);
        Iterator iterator = listGestionImagenes.iterator();
        while (iterator.hasNext()) {
            GestionImagenDto gestionImagenDto = (GestionImagenDto) iterator.next();
            Double porcentaje;
            if (numeroTotalImagenes != 0) {
                porcentaje = (gestionImagenDto.getNumeroImagenes().doubleValue() * 100) / numeroTotalImagenes.doubleValue();
            }
            else {
                porcentaje = new Double(0);
            }
            gestionImagenDto.setPorcentaje(porcentaje);
            gestionImagenDto.setPorcentajeFormat(DECIMAL_FORMAT.format(porcentaje.doubleValue()));
            porcentajeTotal +=  porcentaje;
            listGestionImagenesComplete.add(gestionImagenDto);
        }
        GestionImagenDto gestionImagenTotalDto = new GestionImagenDto();
        gestionImagenTotalDto.setCodigoGestionImagen("-1");
        gestionImagenTotalDto.setNombreGestionImagen("TOTAL");
        gestionImagenTotalDto.setNumeroImagenes(numeroTotalImagenes);
        gestionImagenTotalDto.setNumeroImagenesFormat(DECIMAL_FORMAT.format(numeroTotalImagenes));
        gestionImagenTotalDto.setPorcentaje(porcentajeTotal);
        gestionImagenTotalDto.setPorcentajeFormat(DECIMAL_FORMAT.format(porcentajeTotal));
        listGestionImagenesComplete.add(gestionImagenTotalDto);
        return listGestionImagenesComplete;
    }
    
    public List getGestionImagenesByBusqueda(BusquedaDto dto) throws DAOException {
        List listGestionImagenes = new ArrayList();
        Connection con = null;
        PreparedStatement statementImagenesCargadas = null;
        PreparedStatement statementImagenesPendientes = null;
        ResultSet rs = null;
        Integer numeroTotalImagenes = 0;
        int indice = 0;
        try {
            con = getConnectionDB2();
            con.setReadOnly(true);
            con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
            dto.setCodigoGestionImagen(ConsultasSource.getInstance().getConsultasSetupKey("codigoGestionImagenCargada"));
            statementImagenesCargadas = QueryFactory.getInstance().getQuery(QueryFactory.NUMERO_IMAGENES_BY_BUSQUEDA, con, dto);
            dto.setCodigoGestionImagen(ConsultasSource.getInstance().getConsultasSetupKey("codigoGestionImagenPendiente"));
            statementImagenesPendientes = QueryFactory.getInstance().getQuery(QueryFactory.NUMERO_IMAGENES_BY_BUSQUEDA, con, dto);
            rs = statementImagenesCargadas.executeQuery();
            if (rs.next()) {
                GestionImagenDto gestionImagenDto = new GestionImagenDto();
                gestionImagenDto.setCodigoGestionImagen(ConsultasSource.getInstance().getConsultasSetupKey("codigoGestionImagenCargada"));
                gestionImagenDto.setNombreGestionImagen(ConsultasSource.getInstance().getConsultasSetupKey("nombreGestionImagenCargada"));
                gestionImagenDto.setNumeroImagenes(rs.getInt(++indice));
                gestionImagenDto.setNumeroImagenesFormat(DECIMAL_FORMAT.format(gestionImagenDto.getNumeroImagenes()));
                if (gestionImagenDto.getNumeroImagenes() > 0) {
                    gestionImagenDto.setGreaterThanZero(true);
                }
                else {
                    gestionImagenDto.setGreaterThanZero(false);
                }
                numeroTotalImagenes += gestionImagenDto.getNumeroImagenes();
                listGestionImagenes.add(gestionImagenDto);
            }
            rs = statementImagenesPendientes.executeQuery();
            if (rs.next()) {
                indice = 0;
                GestionImagenDto gestionImagenDto = new GestionImagenDto();
                gestionImagenDto.setCodigoGestionImagen(ConsultasSource.getInstance().getConsultasSetupKey("codigoGestionImagenPendiente"));
                gestionImagenDto.setNombreGestionImagen(ConsultasSource.getInstance().getConsultasSetupKey("nombreGestionImagenPendiente"));
                gestionImagenDto.setNumeroImagenes(rs.getInt(++indice));
                gestionImagenDto.setNumeroImagenesFormat(DECIMAL_FORMAT.format(gestionImagenDto.getNumeroImagenes()));
                if (gestionImagenDto.getNumeroImagenes() > 0) {
                    gestionImagenDto.setGreaterThanZero(true);
                }
                else {
                    gestionImagenDto.setGreaterThanZero(false);
                }
                numeroTotalImagenes += gestionImagenDto.getNumeroImagenes();
                listGestionImagenes.add(gestionImagenDto);
            }
            listGestionImagenes = this.calcularPorcentajesByGestionImagenes(listGestionImagenes, numeroTotalImagenes);
        }
        catch (QueryFactoryException e) {
            throw new DAOException("OrdenProcesoDAO:getGestionImagenesByBusqueda:" + e.toString(), e);
        }
        catch (SQLException e) {
            throw new DAOException("OrdenProcesoDAO:getGestionImagenesByBusqueda:" + e.toString(), e);
        }
        finally {
            closeConnection(null, statementImagenesCargadas);
            closeConnection(con, statementImagenesPendientes, rs);
        }
        return listGestionImagenes;
    }
    
    protected List calcularPorcentajesByDetallesEmpresaMensajeriaNodo(List listDetallesEmpresaMensajeriaNodo, Integer numeroTotalEnvios) throws DAOException {
        List listDetallesEmpresaMensajeriaNodoComplete = new ArrayList(); 
        Double porcentajeTotal = new Double(0);
        Iterator iterator = listDetallesEmpresaMensajeriaNodo.iterator();
        while (iterator.hasNext()) {
            EmpresaMensajeriaNodoDto empresaMensajeriaNodoDto = (EmpresaMensajeriaNodoDto) iterator.next();
            Double porcentaje;
            if (numeroTotalEnvios != 0) {
                porcentaje = (empresaMensajeriaNodoDto.getNumeroEnvios().doubleValue() * 100) / numeroTotalEnvios.doubleValue();
            }
            else {
                porcentaje = new Double(0);
            }
            empresaMensajeriaNodoDto.setPorcentaje(porcentaje);
            empresaMensajeriaNodoDto.setPorcentajeFormat(DECIMAL_FORMAT.format(porcentaje.doubleValue()));
            porcentajeTotal +=  porcentaje;
            listDetallesEmpresaMensajeriaNodoComplete.add(empresaMensajeriaNodoDto);
        }
        EmpresaMensajeriaNodoDto empresaMensajeriaNodoTotalDto = new EmpresaMensajeriaNodoDto();
        empresaMensajeriaNodoTotalDto.setCodigoProveedor("-1");
        empresaMensajeriaNodoTotalDto.setRazonSocial("");
        empresaMensajeriaNodoTotalDto.setCodigoNodo("-1");
        empresaMensajeriaNodoTotalDto.setNombreNodo("TOTAL");
        empresaMensajeriaNodoTotalDto.setNumeroEnvios(numeroTotalEnvios);
        empresaMensajeriaNodoTotalDto.setNumeroEnviosFormat(DECIMAL_FORMAT.format(numeroTotalEnvios));
        if (empresaMensajeriaNodoTotalDto.getNumeroEnvios() > 0) {
            empresaMensajeriaNodoTotalDto.setGreaterThanZero(true);
        }
        else {
            empresaMensajeriaNodoTotalDto.setGreaterThanZero(false);
        }
        empresaMensajeriaNodoTotalDto.setPorcentaje(porcentajeTotal);
        empresaMensajeriaNodoTotalDto.setPorcentajeFormat(DECIMAL_FORMAT.format(porcentajeTotal));
        listDetallesEmpresaMensajeriaNodoComplete.add(empresaMensajeriaNodoTotalDto);
        return listDetallesEmpresaMensajeriaNodoComplete;
    }
    
    public List getDetallesEmpresaMensajeriaNodoByBusqueda(BusquedaDto dto) throws DAOException {
        List listDestallesEmpresasMensajeriaNodos = new ArrayList();
        Connection con = null;
        PreparedStatement statementEmpresaMensajeriaNodo = null;
        PreparedStatement statementNumeroEnvios = null;
        ResultSet rs = null;
        ResultSet rs1 = null;
        Integer numeroTotalEnvios = 0;
        List listPreparedStatements;
        try {
            con = getConnectionDB2();
            con.setReadOnly(true);
            con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
            statementEmpresaMensajeriaNodo = QueryFactory.getInstance().getQuery(QueryFactory.DETALLES_EMPRESA_MENSAJERIA_NODO_BY_BUSQUEDA, con, dto);
            statementNumeroEnvios = QueryFactory.getInstance().getQuery(QueryFactory.NUMERO_ENVIOS_BY_NODO_AND_BUSQUEDA, con, dto);
            rs = statementEmpresaMensajeriaNodo.executeQuery();
            while (rs.next()) {
                int indice = 0;
                EmpresaMensajeriaNodoDto empresaMensajeriaNodoDto = new EmpresaMensajeriaNodoDto();
                empresaMensajeriaNodoDto.setCodigoProveedor(rs.getString(++indice));
                empresaMensajeriaNodoDto.setRazonSocial(rs.getString(++indice));
                empresaMensajeriaNodoDto.setCodigoNodo(rs.getString(++indice));
                empresaMensajeriaNodoDto.setNombreNodo(rs.getString(++indice));
                int indice1 = 0;
                statementNumeroEnvios.setObject(++indice1, empresaMensajeriaNodoDto.getCodigoNodo());
                rs1 = statementNumeroEnvios.executeQuery();
                if (rs1.next()) {
                    indice1 = 0;
                    empresaMensajeriaNodoDto.setNumeroEnvios(rs1.getInt(++indice1));
                    empresaMensajeriaNodoDto.setNumeroEnviosFormat(DECIMAL_FORMAT.format(empresaMensajeriaNodoDto.getNumeroEnvios()));
                    if (empresaMensajeriaNodoDto.getNumeroEnvios() > 0) {
                        empresaMensajeriaNodoDto.setGreaterThanZero(true);
                    }
                    else {
                        empresaMensajeriaNodoDto.setGreaterThanZero(false);
                    }
                }
                numeroTotalEnvios += empresaMensajeriaNodoDto.getNumeroEnvios();
                listDestallesEmpresasMensajeriaNodos.add(empresaMensajeriaNodoDto);
            }
            listDestallesEmpresasMensajeriaNodos = this.calcularPorcentajesByDetallesEmpresaMensajeriaNodo(listDestallesEmpresasMensajeriaNodos, numeroTotalEnvios);
        }
        catch (QueryFactoryException e) {
            throw new DAOException("OrdenProcesoDAO:getDetallesEmpresaMensajeriaNodoByBusqueda:" + e.toString(), e);
        }
        catch (SQLException e) {
            throw new DAOException("DistribucionDAO:getDetallesEmpresaMensajeriaNodoByBusqueda:" + e.toString(), e);
        }
        finally {
            closeConnection(null, statementEmpresaMensajeriaNodo, rs);
            closeConnection(con, statementNumeroEnvios, rs1);
        }
        return listDestallesEmpresasMensajeriaNodos;
    }
    
    public List getNumerosOrdenesByBusqueda(BusquedaDto dto) throws DAOException {
        List listNumerosOrdenes = new ArrayList();
        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        try {
            con = getConnectionDB2();
            con.setReadOnly(true);
            con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
            statement = QueryFactory.getInstance().getQuery(QueryFactory.NUMEROS_ORDENES_BY_BUSQUEDA, con, dto);
            rs = statement.executeQuery();
            while (rs.next()) {
                int indice = 0;
                OrdenProcesoDto ordenProcesoDto = new OrdenProcesoDto();
                ordenProcesoDto.setNumeroOrden(rs.getString(++indice));
                listNumerosOrdenes.add(ordenProcesoDto);
            }
        }
        catch (QueryFactoryException e) {
            throw new DAOException("OrdenProcesoDAO:getNumerosOrdenesByBusqueda:" + e.toString(), e);
        }
        catch (SQLException e) {
            throw new DAOException("OrdenProcesoDAO:getNumerosOrdenesByBusqueda:" + e.toString(), e);
        }
        finally {
            closeConnection(con, statement, rs);
        }
        return listNumerosOrdenes;
    }
    
    // <editor-fold defaultstate="collapsed" desc="method disabled: getEnviosOrdenesProcesoByBusqueda()">
    /**
     *
     *
    public List getEnviosOrdenesProcesoByBusqueda(BusquedaDto dto) throws DAOException {
        List listEnviosOrdenesProceso = new ArrayList();
        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        try {
            con = getConnectionDB2();
            con.setReadOnly(true);
            con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
            statement = QueryFactory.getInstance().getQuery(QueryFactory.ENVIOS_ORDENES_PROCESO_BY_NODO_AND_BUSQUEDA, con, dto);
            rs = statement.executeQuery();
            while (rs.next()) {
                int indice = 0;
                EnvioOrdenProcesoDto envioOrdenProcesoDto = new EnvioOrdenProcesoDto();
                envioOrdenProcesoDto.setCodigoBarras(rs.getString(++indice));
                envioOrdenProcesoDto.setNumeroOrden(rs.getString(++indice));
                envioOrdenProcesoDto.setNombreDepartamento(rs.getString(++indice));
                envioOrdenProcesoDto.setNombreMunicipio(rs.getString(++indice));
                envioOrdenProcesoDto.setNombreCentroPoblado(rs.getString(++indice));
                envioOrdenProcesoDto.setNombreGestion(rs.getString(++indice));
                envioOrdenProcesoDto.setFechaUltimaGestion(rs.getDate(++indice));
                envioOrdenProcesoDto.setRazonSocialProveedor(rs.getString(++indice));
                envioOrdenProcesoDto.setNombreNodo(rs.getString(++indice));
                envioOrdenProcesoDto.setRazonSocialCliente(rs.getString(++indice));
                envioOrdenProcesoDto.setDescripcionProducto(rs.getString(++indice));
                envioOrdenProcesoDto.setDireccionDestinatario(rs.getString(++indice));
		envioOrdenProcesoDto.setFechaProceso(rs.getDate(++indice));
                listEnviosOrdenesProceso.add(envioOrdenProcesoDto);
            }
        }
        catch (QueryFactoryException e) {
            throw new DAOException("OrdenProcesoDAO:getEnviosOrdenesProcesoByBusqueda:" + e.toString(), e);
        }
        catch (SQLException e) {
            throw new DAOException("OrdenProcesoDAO:getEnviosOrdenesProcesoByBusqueda:" + e.toString(), e);
        }
        finally {
            closeConnection(con, statement, rs);
        }
        return listEnviosOrdenesProceso;
    }
     */
    // </editor-fold>
    
    public void insertMensajeAlerta(String fileName, String ldapUser, int numeroRegistros,List lstOrdenes) throws DAOException {
        Connection con = null;
        PreparedStatement statement = null;
	StringBuffer listaOrdenes_=new StringBuffer();
	int i=0;
	for(Iterator it=lstOrdenes.iterator();it.hasNext() && i<10;i++){
		String numOrd_=(String)it.next();
		if(i>0){
		    listaOrdenes_.append(",");
		}
		listaOrdenes_.append(numOrd_);
	    }
	
	    if(lstOrdenes.size()>10){
		listaOrdenes_.append("...");
	    }
	
        try {
            con = getConnectionDB2();
            statement = con.prepareStatement("INSERT INTO " + SCHEMA + ".MENSAJE_ALERTA (CODIGO_TIPO_ARCHIVO, CODIGO_RESPONSABLE, DESCRIPCION_MENSAJE_ALERTA, ORIGEN_MENSAJE_ALERTA, PATH_MENSAJE_ALERTA, FECHA_REGISTRO, ESTADO) " +
                                             "VALUES (?, ?, ?, ?, ?, ?, ?)");
            int indice = 0;
            statement.setObject(++indice, ConstantesGenerales.FILE_CODE);
            statement.setObject(++indice, ldapUser);
            statement.setObject(++indice, ConstantesGenerales.DESCRIPCION_MENSAJE_ALERTA_ORDEN_PROCESO.replace("?", Integer.toString(numeroRegistros)).replace("%",listaOrdenes_));
            statement.setObject(++indice, ConstantesGenerales.FILE_ORIGIN_ORDEN_PROCESO);
            statement.setObject(++indice, fileName);
            statement.setTimestamp(++indice, new Timestamp((new Date()).getTime()));
            statement.setObject(++indice, ConstantesGenerales.FILE_ACTIVE);
            statement.executeUpdate();
        } 
        catch (SQLException e) {
            throw new DAOException("OrdenProcesoDAO:insertMensajeAlerta:" + e.toString(), e);
        }
        finally {
            closeConnection(con, statement);
        }
    }
    
    public void insertMensajeAlertaBaseCliente(String fileName, String ldapUser, List lstOrdenes,String part) throws DAOException{
        Connection con = null;
        PreparedStatement statement = null;
	StringBuffer listaOrdenes_=new StringBuffer();
	int i=0;
	
	    for(Iterator it=lstOrdenes.iterator();it.hasNext() && i<10;i++){
		String numOrd_=(String)it.next();
		if(i>0){
		    listaOrdenes_.append(",");
		}
		listaOrdenes_.append(numOrd_);
	    }
	
	    if(lstOrdenes.size()>10){
		listaOrdenes_.append("...");
	    }
	
        try {
            con = getConnectionDB2();
            statement = con.prepareStatement("INSERT INTO " + SCHEMA + ".MENSAJE_ALERTA (CODIGO_TIPO_ARCHIVO, CODIGO_RESPONSABLE, DESCRIPCION_MENSAJE_ALERTA, ORIGEN_MENSAJE_ALERTA, PATH_MENSAJE_ALERTA, FECHA_REGISTRO, ESTADO) " +
                                             "VALUES (?, ?, ?, ?, ?, ?, ?)");
            int indice = 0;
            statement.setObject(++indice, ConstantesGenerales.FILE_CODE);
            statement.setObject(++indice, ldapUser);
            statement.setObject(++indice, (ConstantesGenerales.DESCRIPCION_MENSAJE_ALERTA_BASE_CLIENTE.replace("?", listaOrdenes_.toString()).replace("%",part)));
            statement.setObject(++indice, ConstantesGenerales.FILE_ORIGIN_ORDEN_PROCESO);
            statement.setObject(++indice, fileName);
            statement.setTimestamp(++indice, new Timestamp((new Date()).getTime()));
            statement.setObject(++indice, ConstantesGenerales.FILE_ACTIVE);
            statement.executeUpdate();
        } 
        catch (SQLException e) {
            throw new DAOException("OrdenProcesoDAO:insertMensajeAlertaBaseCliente:" + e.toString(), e);
        }
        catch(Exception e){
	    xLogger.error("OrdenProcesoDAO:insertMensajeAlertaBaseCliente:", e);
	}
        finally {
            closeConnection(con, statement);
        }
    }
    
    public List getDetallesOrdenProcesoSecondByBusqueda(BusquedaDto dto) throws DAOException {
        List listDetallesOrdenProceso = new ArrayList();
        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
	int  totalEnvios_=0;
        try {
            con = getConnectionDB2();
            con.setReadOnly(true);
            con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
            statement = QueryFactory.getInstance().getQuery(QueryFactory.DETALLES_ORDEN_PROCESO_SECOND_BY_BUSQUEDA, con, dto);
            rs = statement.executeQuery();
            while (rs.next()) {
                int indice = 0;
                OrdenProcesoDto ordenProcesoDto = new OrdenProcesoDto();
                ordenProcesoDto.setNumeroOrden(rs.getString(++indice));
                ordenProcesoDto.setRazonSocial(rs.getString(++indice));
                ordenProcesoDto.setDescripcionProducto(rs.getString(++indice));
                ordenProcesoDto.setFechaProceso(rs.getDate(++indice));
                ordenProcesoDto.setCiclo(rs.getString(++indice));
                ordenProcesoDto.setNumeroEnvios(rs.getString(++indice));
		ordenProcesoDto.setCodigoCliente(rs.getString(++indice));
		try{
		    totalEnvios_+=Integer.parseInt(ordenProcesoDto.getNumeroEnvios());
		}catch(NumberFormatException nex){
		    totalEnvios_+=0;
		}
                listDetallesOrdenProceso.add(ordenProcesoDto);
            }
	     OrdenProcesoDto ordenProcesoDto = new OrdenProcesoDto();
	     ordenProcesoDto.setCiclo("TOTAL");
             ordenProcesoDto.setNumeroEnvios(Integer.toString(totalEnvios_));
	     listDetallesOrdenProceso.add(ordenProcesoDto);
	    
        }
        catch (QueryFactoryException e) {
            throw new DAOException("OrdenProcesoDAO:getDetallesOrdenProcesoSecondByBusqueda:" + e.toString(), e);
        }
        catch (SQLException e) {
            throw new DAOException("OrdenProcesoDAO:getDetallesOrdenProcesoSecondByBusqueda:" + e.toString(), e);
        }
        finally {
            closeConnection(con, statement, rs);
        }
        return listDetallesOrdenProceso;
    }
    
     public List getDetallesBaseParaClientes(BusquedaDto dto,HashMap pMapClienteOrdenes) throws DAOException {
        List listResultado = new ArrayList();
        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
	String query_=null;
	StringBuffer inQuery_=new StringBuffer();
        try {
	    if(dto.getListNumerosOrdenes()!=null && (dto.getNumeroOrden()==null || dto.getNumeroOrden().equals(""))){
		List listaOrdenes_=dto.getListNumerosOrdenes();
		int i=0;
		for(Iterator it=listaOrdenes_.iterator();it.hasNext();i++){
		String ord_=(String)it.next();
		    con = getConnectionDB2();
                    con.setReadOnly(true);
                    con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
		    String codigoCliente_=null;
		    if(dto.getCodigoCliente()==null || dto.getCodigoCliente().equals("")){
			codigoCliente_=(String)pMapClienteOrdenes.get(ord_);
		    }else{
			codigoCliente_=dto.getCodigoCliente();
		    }
		    if(codigoCliente_==null){
			codigoCliente_=dto.getCodigoCliente();
		    }
		 if(codigoCliente_!=null && !codigoCliente_.equals("")){
		    query_ = "SELECT E.CODIGO_BARRAS,D.CODIGO_INTERNO_CLIENTE,E.NUMERO_IDENTIFICACION,E.NOMBRE_DESTINATARIO,E.DIRECCION_DESTINATARIO,E.SITIO_ORIGINAL" +
			    ",E.TELEFONO_DESTINATARIO,GES.NOMBRE_GESTION,TGES.NOMBRE_TIPO_GESTION,E.FECHA_ULTIMA_GESTION,CREG.DESCRIPCION_REGIONAL,D.NUMERO_IDENTIFICACION_ABONADO" +
			    ",D.NOMBRE_ABONADO,D.TELEFONO_ABONADO,D.NUMERO_DOCUMENTO,CLIO.CODIGO_OFICINA,CLIO.NOMBRE_OFICINA,CLI.RAZON_SOCIAL,PRO.DESCRIPCION_PRODUCTO" +			
			    ",SEGPR.DESCRIPCION_SEGMENTO,SUBPR.DESCRIPCION_SUBPRODUCTO,SUBSEG.DESCRIPCION_SEGMENTO" +
			    ",ORD.CICLO,E.NUMERO_ORDEN,E.FECHA_PROCESO,TPE.NOMBRE_TIPO_ENVIO,E.PROBABILIDAD_ENTREGA " +
			    "FROM PRODRAD.ENVIO E " +
			    "INNER JOIN "+SCHEMA+".DOCUMENTO D ON D.CODIGO_BARRAS=E.CODIGO_BARRAS " +
			    "INNER JOIN "+SCHEMA+".ORDEN_PROCESO ORD ON ORD.NUMERO_ORDEN=E.NUMERO_ORDEN " +
			    "INNER JOIN "+SCHEMA+".GESTION_ENVIO GES ON GES.CODIGO_GESTION=E.CODIGO_ULTIMA_GESTION " +
			    "INNER JOIN "+SCHEMA+".TIPO_GESTION_ENVIO TGES ON TGES.CODIGO_TIPO_GESTION=GES.CODIGO_TIPO_GESTION " +
			    "INNER JOIN "+SCHEMA+".CLIENTE CLI ON CLI.CODIGO_CLIENTE="+codigoCliente_+" "+ 
			    "INNER JOIN "+SCHEMA+".PRODUCTO PRO ON (PRO.CODIGO_CLIENTE="+codigoCliente_+" AND PRO.CODIGO_PRODUCTO=E.CODIGO_PRODUCTO) " +
			    "INNER JOIN "+SCHEMA+".SUBPRODUCTO SUBPR ON SUBPR.CODIGO_SUBPRODUCTO=D.CODIGO_SUBPRODUCTO " +
			    "INNER JOIN "+SCHEMA+".CLIENTE_REGIONAL CREG ON (CREG.CODIGO_CLIENTE="+codigoCliente_+" AND CREG.CODIGO_REGIONAL=COALESCE(E.CODIGO_REGIONAL,0)) " +
			    "INNER JOIN "+SCHEMA+".CLIENTE_OFICINA CLIO ON (CLIO.CODIGO_CLIENTE="+codigoCliente_+" AND CLIO.CODIGO_OFICINA=COALESCE(D.CODIGO_OFICINA,0)) " +
			    "INNER JOIN "+SCHEMA+".SEGMENTO_PRODUCTO SEGPR ON (SEGPR.CODIGO_SEGMENTO_PRODUCTO=E.CODIGO_SEGMENTO_PRODUCTO AND SEGPR.CODIGO_PRODUCTO=PRO.CODIGO_PRODUCTO) " +
			    "INNER JOIN "+SCHEMA+".SEGMENTO_SUBPRODUCTO SUBSEG ON (SUBSEG.CODIGO_SUBPRODUCTO=SUBPR.CODIGO_SUBPRODUCTO AND SUBSEG.CODIGO_SEGMENTO_SUBPRODUCTO=D.CODIGO_SEGMENTO_SUBPRODUCTO) " +
			    "INNER JOIN "+SCHEMA+".TIPO_ENVIO TPE ON TPE.CODIGO_TIPO_ENVIO=E.CODIGO_TIPO_ENVIO " +
			    "WHERE E.NUMERO_ORDEN IN ("+ord_+")";
		    String codigoGestion_=dto.getCodigoGestion();

		    String codigoTipoGestion_=dto.getCodigoTipoGestion();		
		    if(codigoTipoGestion_!=null && !codigoTipoGestion_.equals("") && !codigoTipoGestion_.equals("-1")){
			query_+=" AND GES.CODIGO_TIPO_GESTION="+codigoTipoGestion_;
		    }
		    if(codigoGestion_!=null && !codigoGestion_.equals("") && !codigoGestion_.equals("-1")){
			query_+=" AND E.CODIGO_ULTIMA_GESTION="+codigoGestion_;
		    }
		    
		    if(dto.getCodigoNodoFilter()!=null && !dto.getCodigoNodoFilter().equals("") && !dto.getCodigoNodoFilter().equals("-1")){
			query_+=" AND E.CODIGO_NODO="+dto.getCodigoNodoFilter();
		    }
		     List listDetalles = new ArrayList();
		    statement=con.prepareStatement(query_);	    
		    rs = statement.executeQuery();
		    while (rs.next()) {
			int indice = 0;
			BaseClienteDto baseDto_=new BaseClienteDto();
			
			baseDto_.setCodigoBarras(rs.getString(++indice));			
			baseDto_.setCodigoInternoCliente(rs.getString(++indice));
			baseDto_.setNumeroIdentificacion(rs.getString(++indice));
			baseDto_.setNombreDestinatario(rs.getString(++indice));
			baseDto_.setDireccionDestinarario(rs.getString(++indice));
			baseDto_.setSitioOriginal(rs.getString(++indice));
			baseDto_.setTelefonoDestinatario(rs.getString(++indice));
			baseDto_.setNombreGestion(rs.getString(++indice));
			baseDto_.setNombreTipoGestion(rs.getString(++indice));
			baseDto_.setFechaUltimaGestion(rs.getDate(++indice));
			baseDto_.setDescripcionRegional(rs.getString(++indice));
			baseDto_.setNumeroIdentificacionAbonado(rs.getString(++indice));
			baseDto_.setNombreAbonado(rs.getString(++indice));
			baseDto_.setTelefonoAbonado(rs.getString(++indice));
			baseDto_.setNumeroDocumento(rs.getString(++indice));
			baseDto_.setCodigoOficina(rs.getString(++indice));
			baseDto_.setNombreOficina(rs.getString(++indice));			
			baseDto_.setRazonSocial(rs.getString(++indice));
			baseDto_.setDescripcionProducto(rs.getString(++indice));
			baseDto_.setDescripcionSegmentoProducto(rs.getString(++indice));
			baseDto_.setDescripcionSubproducto(rs.getString(++indice));
			baseDto_.setDescripcionSegmentoSubproducto(rs.getString(++indice));
			baseDto_.setCiclo(rs.getString(++indice));			
			baseDto_.setNumeroOrden(rs.getString(++indice));			
			baseDto_.setFechaProceso(rs.getDate(++indice));			
			baseDto_.setTipoEnvio(rs.getString(++indice));
			baseDto_.setProbabilidadEntrega(rs.getString(++indice));			
			listDetalles.add(baseDto_);
		    }
		    listResultado.addAll(listDetalles);		    
		    }
		}        
	    }else{
		String ord_=dto.getNumeroOrden();
		String codigoCliente_=null;
		if(dto.getCodigoCliente()==null || dto.getCodigoCliente().equals("")){
		    codigoCliente_=(String)pMapClienteOrdenes.get(ord_);
		}else{
		    codigoCliente_=dto.getCodigoCliente();
		}		
		if(codigoCliente_==null){
		    codigoCliente_=dto.getCodigoCliente();
		}
		 con = getConnectionDB2();
		    query_ = "SELECT E.CODIGO_BARRAS,D.CODIGO_INTERNO_CLIENTE,E.NUMERO_IDENTIFICACION,E.NOMBRE_DESTINATARIO,E.DIRECCION_DESTINATARIO,E.SITIO_ORIGINAL" +
			    ",E.TELEFONO_DESTINATARIO,GES.NOMBRE_GESTION,TGES.NOMBRE_TIPO_GESTION,E.FECHA_ULTIMA_GESTION,CREG.DESCRIPCION_REGIONAL,D.NUMERO_IDENTIFICACION_ABONADO" +
			    ",D.NOMBRE_ABONADO,D.TELEFONO_ABONADO,D.NUMERO_DOCUMENTO,CLIO.CODIGO_OFICINA,CLIO.NOMBRE_OFICINA,CLI.RAZON_SOCIAL,PRO.DESCRIPCION_PRODUCTO" +			
			    ",SEGPR.DESCRIPCION_SEGMENTO,SUBPR.DESCRIPCION_SUBPRODUCTO,SUBSEG.DESCRIPCION_SEGMENTO" +
			    ",ORD.CICLO,E.NUMERO_ORDEN,E.FECHA_PROCESO,TPE.NOMBRE_TIPO_ENVIO,E.PROBABILIDAD_ENTREGA " +
			    "FROM PRODRAD.ENVIO E " +
			    "INNER JOIN "+SCHEMA+".DOCUMENTO D ON D.CODIGO_BARRAS=E.CODIGO_BARRAS " +
			    "INNER JOIN "+SCHEMA+".ORDEN_PROCESO ORD ON ORD.NUMERO_ORDEN=E.NUMERO_ORDEN " +
			    "INNER JOIN "+SCHEMA+".GESTION_ENVIO GES ON GES.CODIGO_GESTION=E.CODIGO_ULTIMA_GESTION " +
			    "INNER JOIN "+SCHEMA+".TIPO_GESTION_ENVIO TGES ON TGES.CODIGO_TIPO_GESTION=GES.CODIGO_TIPO_GESTION " +
			    "INNER JOIN "+SCHEMA+".CLIENTE CLI ON CLI.CODIGO_CLIENTE="+codigoCliente_+" "+ 
			    "INNER JOIN "+SCHEMA+".PRODUCTO PRO ON (PRO.CODIGO_CLIENTE="+codigoCliente_+" AND PRO.CODIGO_PRODUCTO=E.CODIGO_PRODUCTO) " +
			    "INNER JOIN "+SCHEMA+".SUBPRODUCTO SUBPR ON SUBPR.CODIGO_SUBPRODUCTO=D.CODIGO_SUBPRODUCTO " +
			    "INNER JOIN "+SCHEMA+".CLIENTE_REGIONAL CREG ON (CREG.CODIGO_CLIENTE="+codigoCliente_+" AND CREG.CODIGO_REGIONAL=COALESCE(E.CODIGO_REGIONAL,0)) " +
			    "INNER JOIN "+SCHEMA+".CLIENTE_OFICINA CLIO ON (CLIO.CODIGO_CLIENTE="+codigoCliente_+" AND CLIO.CODIGO_OFICINA=COALESCE(D.CODIGO_OFICINA,0)) " +
			    "INNER JOIN "+SCHEMA+".SEGMENTO_PRODUCTO SEGPR ON (SEGPR.CODIGO_SEGMENTO_PRODUCTO=E.CODIGO_SEGMENTO_PRODUCTO AND SEGPR.CODIGO_PRODUCTO=PRO.CODIGO_PRODUCTO) " +
			    "INNER JOIN "+SCHEMA+".SEGMENTO_SUBPRODUCTO SUBSEG ON (SUBSEG.CODIGO_SUBPRODUCTO=SUBPR.CODIGO_SUBPRODUCTO AND SUBSEG.CODIGO_SEGMENTO_SUBPRODUCTO=D.CODIGO_SEGMENTO_SUBPRODUCTO) " +
			    "INNER JOIN "+SCHEMA+".TIPO_ENVIO TPE ON TPE.CODIGO_TIPO_ENVIO=E.CODIGO_TIPO_ENVIO " +
			    "WHERE E.NUMERO_ORDEN IN ("+ord_+")";
		    String codigoGestion_=dto.getCodigoGestion();

		    String codigoTipoGestion_=dto.getCodigoTipoGestion();		
		    if(codigoTipoGestion_!=null && !codigoTipoGestion_.equals("") && !codigoTipoGestion_.equals("-1")){
			query_+=" AND GES.CODIGO_TIPO_GESTION="+codigoTipoGestion_;
		    }
		    if(codigoGestion_!=null && !codigoGestion_.equals("") && !codigoGestion_.equals("-1")){
			query_+=" AND E.CODIGO_ULTIMA_GESTION="+codigoGestion_;
		    }
		    if(dto.getCodigoNodoFilter()!=null && !dto.getCodigoNodoFilter().equals("") && !dto.getCodigoNodoFilter().equals("-1")){
			query_+=" AND E.CODIGO_NODO="+dto.getCodigoNodoFilter();
		    }
		     List listDetalles = new ArrayList();
		    statement=con.prepareStatement(query_);	    
		    rs = statement.executeQuery();
		    while (rs.next()) {
			int indice = 0;
		
			BaseClienteDto baseDto_=new BaseClienteDto();	
			
			baseDto_.setCodigoBarras(rs.getString(++indice));			
			baseDto_.setCodigoInternoCliente(rs.getString(++indice));			
			baseDto_.setNumeroIdentificacion(rs.getString(++indice));			
			baseDto_.setNombreDestinatario(rs.getString(++indice));			
			baseDto_.setDireccionDestinarario(rs.getString(++indice));			
			baseDto_.setSitioOriginal(rs.getString(++indice));
			baseDto_.setTelefonoDestinatario(rs.getString(++indice));
			baseDto_.setNombreGestion(rs.getString(++indice));
			baseDto_.setNombreTipoGestion(rs.getString(++indice));
			baseDto_.setFechaUltimaGestion(rs.getDate(++indice));
			baseDto_.setDescripcionRegional(rs.getString(++indice));
			baseDto_.setNumeroIdentificacionAbonado(rs.getString(++indice));
			baseDto_.setNombreAbonado(rs.getString(++indice));
			baseDto_.setTelefonoAbonado(rs.getString(++indice));
			baseDto_.setNumeroDocumento(rs.getString(++indice));
			baseDto_.setCodigoOficina(rs.getString(++indice));
			baseDto_.setNombreOficina(rs.getString(++indice));
			baseDto_.setRazonSocial(rs.getString(++indice));
			baseDto_.setDescripcionProducto(rs.getString(++indice));
			baseDto_.setDescripcionSegmentoProducto(rs.getString(++indice));
			baseDto_.setDescripcionSubproducto(rs.getString(++indice));
			baseDto_.setDescripcionSegmentoSubproducto(rs.getString(++indice));
			baseDto_.setCiclo(rs.getString(++indice));
			baseDto_.setNumeroOrden(rs.getString(++indice));
			baseDto_.setFechaProceso(rs.getDate(++indice));	
			baseDto_.setTipoEnvio(rs.getString(++indice));
			baseDto_.setProbabilidadEntrega(rs.getString(++indice));			
			listDetalles.add(baseDto_);
		    }
		    listResultado.addAll(listDetalles);
	    }
	}
        catch (SQLException e) {	
            throw new DAOException("OrdenProcesoDAO:getDetallesBaseParaClientes:" + e.toString(), e);
        }
        finally {
            closeConnection(con, statement, rs);
        }
        return listResultado;
    }
}